使用libvlcsharp在mp4文件中使用moov原子播放视频流

您所在的位置:网站首页 libvlcsharp 视频拉伸整个控件 使用libvlcsharp在mp4文件中使用moov原子播放视频流

使用libvlcsharp在mp4文件中使用moov原子播放视频流

2024-07-13 05:36| 来源: 网络整理| 查看: 265

我想播放低端监控摄像机的视频重播。回放以.mp4格式保存在摄像机上,最后是moov。可以使用digset身份验证通过http请求检索文件。每个视频文件的大概大小是20 MB,但是下载速度只有3 Mbps,所以下载整个文件需要大约60s。这太长了,所以我想在下载整个文件之前开始显示视频。

网络浏览器通过开始读取文件的末尾来处理这类问题。我希望使用c#和libvlcsharp实现相同的目标,因此创建了HttpMediaInput类。

代码语言:javascript复制public class HttpMediaInput : MediaInput { private static readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); private HttpClientHandler _handler; private HttpClient _httpClient; private string _url; Stream _stream = null; public HttpMediaInput(string url, string username, string password) { _url = url; _handler = new HttpClientHandler() { Credentials = new NetworkCredential(username, password) }; _httpClient = new HttpClient(_handler); } public override bool Open(out ulong size) { size = ulong.MaxValue; try { _stream = _httpClient.GetStreamAsync(_url).Result; base.CanSeek = _stream.CanSeek; return true; } catch (Exception ex) { logger.Error(ex, $"Exception occurred during sending stream request to url: {_url}"); return false; } } public unsafe override int Read(IntPtr buf, uint len) { try { byte[] buffer = new byte[len]; int bytesReaded = _stream.Read(buffer, 0, buffer.Length); logger.Trace($"Bytes readed: {bytesReaded}"); Span byteSpan = new Span(buf.ToPointer(), buffer.Length); buffer.CopyTo(byteSpan); return bytesReaded; } catch (Exception ex) { logger.Error(ex, "Stream read exception"); return -1; } } ... }

它可以很好的工作,mp4文件有所有必要的元数据存储在开始,但没有视频显示的情况下,我的相机。

假设我可以使用http请求从mp4下载moov,那么如何将这些数据提供给libvlc?有可能吗?

我正在使用C#、WPF、dotnet框架开发应用程序。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3